
package pe.edu.upc.dew.pharma.dao.mysql;

import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

import pe.edu.upc.dew.pharma.dao.PedidoDao;
import pe.edu.upc.dew.pharma.dao.mapper.PedidoCabMapper;
import pe.edu.upc.dew.pharma.dao.mapper.PedidoDetMapper;
import pe.edu.upc.dew.pharma.model.PedidoCab;
import pe.edu.upc.dew.pharma.model.PedidoDet;
import pe.edu.upc.dew.pharma.util.StoredProcedurePharma;

@Repository
public class MysqlPedidoDao extends SimpleJdbcDaoSupport implements PedidoDao{

	private static final Log logger = LogFactory.getLog(MysqlPedidoDao.class);
	
	@Autowired
	public MysqlPedidoDao(DataSource dataSource){
		setDataSource(dataSource);
	}
	
	@SuppressWarnings("unchecked")
	public List<PedidoCab> obtenerPedidosADespachar(){
		List<PedidoCab> listarPedidos = new ArrayList<PedidoCab>();
		StoredProcedurePharma sp = new StoredProcedurePharma(getJdbcTemplate(), "sp_listadoPedidosPendientes");
		Map<String, Object> result = sp.executeProcedure("pedidoCab", new PedidoCabMapper());
		listarPedidos = (List<PedidoCab>) result.get("pedidoCab");
		return listarPedidos;
	}

	@SuppressWarnings("unchecked")
	public List<PedidoDet> obtenerDetallePedido(int idPedido) {
		
		if(logger.isInfoEnabled()){
			logger.info("obtenerDetallePedido : idPedido = " + idPedido);
		}
		
		List<PedidoDet> detallePedido = new ArrayList<PedidoDet>();
		StoredProcedurePharma sp = new StoredProcedurePharma(getJdbcTemplate(), "sp_listadoDetallePedido");
		sp.addInParameter("p_pedido", Types.INTEGER, idPedido);
		Map<String, Object> result = sp.executeProcedure("pedidoDet", new PedidoDetMapper());
		
		detallePedido = (List<PedidoDet>) result.get("pedidoDet");
		
		if(logger.isInfoEnabled()){
			logger.info("resultado = " + detallePedido.size());
		}
		
		return detallePedido;
	}

	public boolean despacharPedido(int idPedido) {
		
		if(logger.isInfoEnabled()){
			logger.info("depacharPedido : idPedido = " + idPedido);
		}
		StoredProcedurePharma sp = new StoredProcedurePharma(getJdbcTemplate(), "sp_despacharPedido");
		sp.addInParameter("p_pedido", Types.INTEGER, idPedido);
		
		@SuppressWarnings("unused")
		Map<String, Object> result = sp.executeProcedure();
		
		return true;
	}

}
